/**
 * 目前弃用，通过在生成模式下直接配置缓存策略的方法代替
 * 使用vite-plugin-pwa注入模式在这里自定义缓存策略
 */

// 导入 Workbox 核心模块（插件自动注入依赖，无需手动安装）
import { precacheAndRoute } from 'workbox-precaching'
import { registerRoute } from 'workbox-routing'
import { CacheFirst, NetworkFirst } from 'workbox-strategies'
import { CacheableResponsePlugin } from 'workbox-cacheable-response'
import { ExpirationPlugin } from 'workbox-expiration' // 新增：用于设置缓存过期

// 作用：离线时能加载项目的 HTML、JS、CSS 等核心静态资源
precacheAndRoute(self.__WB_MANIFEST, {})

// 自定义路由1：缓存 API 数据
registerRoute(
  ({ url }) =>
    // 精准匹配需要缓存的路径
    url.pathname.startsWith('/api/image/get-image-list'),     
  // NetworkFirst优先请求网络
  new NetworkFirst({
    cacheName: 'quick-canvas-api-cache',
    plugins: [
      // 仅缓存 200 状态码的成功响应（过滤错误响应）
      new CacheableResponsePlugin({ statuses: [200, 304] }),
      // 缓存过期策略：API 数据缓存1天（避免旧数据长期留存）
      new ExpirationPlugin({
        maxAgeSeconds: 24 * 60 * 60, // 1天（单位：秒）
        maxEntries: 50, // 最多缓存50条 API 响应（防止缓存过大）
        purgeOnQuotaError: true, // 当浏览器缓存配额不足时，自动清理此缓存
      }),
    ],
  })
)

// 自定义路由2：缓存图片资源
registerRoute(
  ({ url }) => {
    // 精确匹配URL规则
    return url.origin === 'http://localhost:3333' &&
      url.pathname.startsWith('/canvas-images/') &&
      url.pathname.endsWith('.png')
  },
  // 缓存策略：CacheFirst（优先用缓存，未命中再请求网络）
  new CacheFirst({
    cacheName: 'quick-canvas-image-cache',
    plugins: [
      new CacheableResponsePlugin({ statuses: [200, 304] }),
      // 缓存过期：图片缓存 7 天（静态图片更新频率低）
      new ExpirationPlugin({
        maxAgeSeconds: 7 * 24 * 60 * 60,
        maxEntries: 100, // 最多缓存 100 张图片
        purgeOnQuotaError: true,  // 新增：定期检查过期资源
      }),
    ],
  })
)

// Service Worker 生命周期事件：安装阶段
self.addEventListener('install', (event) => {
  console.log('[SW] 安装完成，准备激活')
  // 强制跳过等待期：新 SW 安装后立即激活（无需用户刷新页面）
  self.skipWaiting()
})

// Service Worker 生命周期事件：激活阶段
self.addEventListener('activate', (event) => {
  console.log('[SW] 激活完成，开始控制页面')
  // 强制接管所有打开的页面（确保新 SW 生效）
  event.waitUntil(self.clients.claim())
})
